﻿using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Xml;

namespace MapaMovil
{
    public partial class FormMostrarEmergencia : Form
    {
        XmlNodeList carrosDespachados;
        ArrayList institucionesRequeridas; 
        ArrayList informacionRequerida;
        ArrayList distanciaEmergencia_CarrosDespachados;

        int resolucion;
        TextBox[] txtEncabezado;
        TextBox[] txtCarro;
        TextBox[] txtEstado;
        TextBox[] txtDistancia;
        Label[] lblDistancia;
        TextBox[] txtHoraDespacho;

        string carro, horadespacho, estado, distToemergencia;
        Int32 distToemergenciaInt;

        public FormMostrarEmergencia(string _acto, string _clave, string _direccion, string _esquina, string _fechaAlarma, string _horaAlarma, XmlNodeList _carrosDespachados, ArrayList _distanciaEmergencia_CarrosDespachados, ArrayList _institucionesRequeridas, ArrayList _informacionRequerida)
        {
            
            InitializeComponent();

            //completar la informacion en el formulario
            this.txtActo.Text  = _acto;
            this.txtClave.Text = _clave;
            this.txtEsquina.Text = _esquina;
            this.txtDireccion.Text = _direccion;
            this.txtFecha.Text = _fechaAlarma;
            this.txtHora.Text = _horaAlarma;
            this.carrosDespachados = _carrosDespachados;
            this.institucionesRequeridas = _institucionesRequeridas;
            this.informacionRequerida=_informacionRequerida;
            this.distanciaEmergencia_CarrosDespachados= _distanciaEmergencia_CarrosDespachados;
            LlenarMatrizCarros2();
        }

        private void btnContinuar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

/*        private void LlenarMatrizCarros() 
        {
//            this.dataGridView1.Rows[0].Cells["NOMBRE"].Value = this.tbNombre.Text;
            DataTable dt = new DataTable();

            //agragar rotulo de columnas
            dt.Columns.Add("Carro");
            dt.Columns.Add("Estado");
            dt.Columns.Add("Dist.(m)");
            dt.Columns.Add("Desp.");

            //carro = this.carrosDespachados[k].SelectNodes("nombrecarro")[0].InnerText;

            for (int k = 0; k < this.carrosDespachados.Count; k++)
            {
                //agregar items de cada carro a la matriz
                string carro,horadespacho,estado,distToemergencia;
                carro = this.carrosDespachados[k].SelectNodes("nombrecarro")[0].InnerText;
                estado = this.carrosDespachados[k].SelectNodes("estado")[0].InnerText;
                distToemergencia = distanciaEmergencia_CarrosDespachados[k].ToString();
                horadespacho = this.carrosDespachados[k].SelectNodes("horadespacho")[0].InnerText;
                
                dt.Rows.Add(carro, estado, distToemergencia, horadespacho);
            }

            //asignar el table al datagrid
            if (dt.Rows.Count>0){
                
                dgCarros.DataSource = dt;

                //modificar los colores de las celdas
                //dgCarros.SelectionBackColor = Color.Red;
                
                
            }
          
            //agregar informacion adicional
            for (int i = 0; i < this.institucionesRequeridas.Count; i++)
            {
                txtInstituciones.Text = txtInstituciones.Text + this.institucionesRequeridas[i].ToString() + "; ";
            }


            for (int i = 0; i < this.informacionRequerida.Count; i++)
            {
                txtInformaciones.Text = txtInformaciones.Text + this.informacionRequerida[i].ToString() + "; ";
            }

        }
*/
        private void LlenarMatrizCarros2()
        {           

            //instanciar 
            txtEncabezado = new TextBox[4];
            txtCarro = new TextBox[carrosDespachados.Count];
            txtEstado = new TextBox[carrosDespachados.Count];
            txtDistancia = new TextBox[carrosDespachados.Count];
            lblDistancia = new Label[carrosDespachados.Count];
            txtHoraDespacho = new TextBox[carrosDespachados.Count];
            
            //verificar resolucion
            if (this.CurrentAutoScaleDimensions.Height == 192)
                resolucion = 2;
            else
                resolucion = 1;

            //agregar rotulos
            paCarros.Controls.Clear();
            
            agregarEncabezados("Carro","Estado","Dist(m)","Despacho");

            //agregar los carros despachados

            agregarCarrosDespachados();


            //refrescar controles
            paCarros.Invalidate();
            paCarros.Refresh();

            //agregar informacion adicional
            for (int i = 0; i < this.institucionesRequeridas.Count; i++)
            {
                txtInstituciones.Text = txtInstituciones.Text + this.institucionesRequeridas[i].ToString() + "; ";
            }


            for (int i = 0; i < this.informacionRequerida.Count; i++)
            {
                txtInformaciones.Text = txtInformaciones.Text + this.informacionRequerida[i].ToString() + "; ";
            }

        }

        private void agregarEncabezados(string cabecera0, string cabecera1, string cabecera2,string cabecera3) {
            
            txtEncabezado[0] = new System.Windows.Forms.TextBox();
            
            txtEncabezado[0].TextAlign = HorizontalAlignment.Left;
            txtEncabezado[0].BorderStyle = BorderStyle.FixedSingle;
            txtEncabezado[0].Font = new Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular);
            txtEncabezado[0].BackColor = Color.Blue;
            txtEncabezado[0].ForeColor = Color.White;
            txtEncabezado[0].Location = new System.Drawing.Point(0, 0 + (17 * resolucion) * (0));
            txtEncabezado[0].Size = new Size(80, 17);
            txtEncabezado[0].Text = cabecera0;
            
            txtEncabezado[1] = new System.Windows.Forms.TextBox();
            txtEncabezado[1].TextAlign = HorizontalAlignment.Left;
            txtEncabezado[1].BorderStyle = BorderStyle.FixedSingle;
            txtEncabezado[1].Font = new Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular);
            txtEncabezado[1].BackColor = Color.Blue;
            txtEncabezado[1].ForeColor = Color.White;
            txtEncabezado[1].Location = new System.Drawing.Point(80, 0 + (17 * resolucion) * (0));
            txtEncabezado[1].Size = new Size(100, 17);
            txtEncabezado[1].Text = cabecera1;

            txtEncabezado[2] = new System.Windows.Forms.TextBox();
            txtEncabezado[2].TextAlign = HorizontalAlignment.Left;
            txtEncabezado[2].BorderStyle = BorderStyle.FixedSingle;
            txtEncabezado[2].Font = new Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular);
            txtEncabezado[2].BackColor = Color.Blue;
            txtEncabezado[2].ForeColor = Color.White;
            txtEncabezado[2].Location = new System.Drawing.Point(180, 0 + (17 * resolucion) * (0));
            txtEncabezado[2].Size = new Size(100, 17);
            txtEncabezado[2].Text = cabecera2;

            txtEncabezado[3] = new System.Windows.Forms.TextBox();
            txtEncabezado[3].TextAlign = HorizontalAlignment.Left;
            txtEncabezado[3].BorderStyle = BorderStyle.FixedSingle;
            txtEncabezado[3].Font = new Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular);
            txtEncabezado[3].BackColor = Color.Blue;
            txtEncabezado[3].ForeColor = Color.White;
            txtEncabezado[3].Location = new System.Drawing.Point(280, 0 + (17 * resolucion) * (0));
            txtEncabezado[3].Size = new Size(110, 17);
            txtEncabezado[3].Text = cabecera3;

            paCarros.Controls.Add(txtEncabezado[0]);
            paCarros.Controls.Add(txtEncabezado[1]);
            paCarros.Controls.Add(txtEncabezado[2]);
            paCarros.Controls.Add(txtEncabezado[3]);
            
        }

        private void agregarCarrosDespachados() 
        {
            
            for (int k = 0; k < this.carrosDespachados.Count; k++)
            {

            //agregar items de cada carro a la matriz
            
                carro = this.carrosDespachados[k].SelectNodes("nombrecarro")[0].InnerText;
                estado = this.carrosDespachados[k].SelectNodes("estado")[0].InnerText;
                distToemergencia = distanciaEmergencia_CarrosDespachados[k].ToString();
                horadespacho = this.carrosDespachados[k].SelectNodes("horadespacho")[0].InnerText;

                //definir color con el que se mostrará, dependiendo de la distancia
                Color theColor;

            
                theColor = definirColor();

            
                txtCarro[k] = new System.Windows.Forms.TextBox();
                txtCarro[k].TextAlign = HorizontalAlignment.Left;
                txtCarro[k].BorderStyle = BorderStyle.FixedSingle;
                txtCarro[k].Font = new Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular);
                txtCarro[k].ForeColor = theColor ;
                txtCarro[k].BackColor = Color.White;
                txtCarro[k].Location = new System.Drawing.Point(0, 0 + (17 * resolucion) * (k+1));
                txtCarro[k].Size = new Size(80, 17);
                txtCarro[k].Text = carro ;

                txtEstado[k] = new System.Windows.Forms.TextBox();
                txtEstado[k].TextAlign = HorizontalAlignment.Left;
                txtEstado[k].BorderStyle = BorderStyle.FixedSingle;
                txtEstado[k].Font = new Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular);
                txtEstado[k].ForeColor = theColor;
                txtEstado[k].BackColor = Color.White;
                txtEstado[k].Location = new System.Drawing.Point(80, 0 + (17 * resolucion) * (k + 1));
                txtEstado[k].Size = new Size(100, 17);
                txtEstado[k].Text = estado;

                txtDistancia[k] = new System.Windows.Forms.TextBox();
                txtDistancia[k].TextAlign = HorizontalAlignment.Right;
                txtDistancia[k].BorderStyle = BorderStyle.FixedSingle;
                txtDistancia[k].Font = new Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular);
                //txtDistancia[k].ForeColor = theColor;
                txtDistancia[k].BackColor = Color.Transparent;
                txtDistancia[k].Location = new System.Drawing.Point(180, 0 + (17 * resolucion) * (k + 1));
                txtDistancia[k].Size = new Size(100, 17);
                txtDistancia[k].SendToBack();
                //txtDistancia[k].Text = distToemergencia;

                
                
                lblDistancia[k] = new System.Windows.Forms.Label();
                lblDistancia[k].TextAlign = ContentAlignment.TopRight;
                //lblDistancia[k].BorderStyle = BorderStyle.FixedSingle;
                lblDistancia[k].Font = new Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular);
                lblDistancia[k].BackColor = Color.Transparent;

                if (theColor == Color.Gray)
                {
                    lblDistancia[k].ForeColor = Color.White;

                }
                else
                {
                    lblDistancia[k].ForeColor = theColor;
                }
                lblDistancia[k].Location = new System.Drawing.Point(180, 3 + (17 * resolucion) * (k + 1));
                lblDistancia[k].Size = new Size(100, 30);
                lblDistancia[k].Text = distToemergencia;
                lblDistancia[k].BringToFront();

                txtHoraDespacho[k] = new System.Windows.Forms.TextBox();
                txtHoraDespacho[k].TextAlign = HorizontalAlignment.Left;
                txtHoraDespacho[k].BorderStyle = BorderStyle.FixedSingle;
                txtHoraDespacho[k].Font = new Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular);
                txtHoraDespacho[k].ForeColor = theColor;
                txtHoraDespacho[k].BackColor = Color.White;
                txtHoraDespacho[k].Location = new System.Drawing.Point(280, 0 + (17 * resolucion) * (k + 1));
                txtHoraDespacho[k].Size = new Size(110, 17);
                txtHoraDespacho[k].Text = horadespacho;

                //agregar los controles al panel

                paCarros.Controls.Add(txtCarro[k]);
                paCarros.Controls.Add(txtEstado[k]);
                paCarros.Controls.Add(lblDistancia[k]);
                paCarros.Controls.Add(txtDistancia[k]);
                
                paCarros.Controls.Add(txtHoraDespacho[k]);            

            }

        }

        private Color definirColor() 
        {
            Color color;
            

            color = Color.Gray;

            
            try
            {
                distToemergenciaInt = Convert.ToInt32(distToemergencia);
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
                return Color.Fuchsia;
            }

            
            if (distToemergenciaInt >= 0)
            {
                if (distToemergenciaInt <= 200)
                {
                    color = Color.Blue;
                }
                else
                {
                    if (distToemergenciaInt <= 800)
                    {
                        color = Color.Green;
                    }
                    else
                    {
                        if (distToemergenciaInt <= 5000)
                        {
                            color = Color.Black;
                        }
                        else
                        {//la distancia es indeterminada
                            color = Color.Gray;
                        }


                    }

                }

            }
            else//la distancia es menor que cero 
            {
                color = Color.Fuchsia;
            }
 
            return color;
        }
        
    }
}